#include <iostream>
using namespace std;

// 顺序栈的类
class My_Stack{
    private:
        int *data;
        int top;
        int max_len;
    public:
        // 初始化栈的函数
        void init(int n){
            max_len = n;
            data = new int[n]();
            top = 0;
        }
        // 判断栈满
        bool is_full(){
            return top == max_len ? true : false;
        }
        // 数据入栈
        int push(int value){
            if(is_full()){
                return -1;
            }
            data[top++] = value;
            return 0;
        }
        // 判断栈空
        bool is_empty(){
            return top == 0 ? true : false;
        }
        // 数据出栈
        int pop(int *num){
            if(is_empty()){
                return -1;
            }
            *num = data[--top];
        }
        // 清空栈
        void clean(){
            top = 0;
        }
        // deinit
        void deinit(){
            delete []data;
            data = nullptr;
        }
        // 打印栈中元素
        void show(){
            for(int i = top-1; i >= 0; i--){
                cout << data[i] << " ";
            }
            cout << endl;
        }
};

int main(int argc, const char *argv[]){
    My_Stack s1;
    s1.init(3); // 初始化
    s1.push(10);
    s1.push(20);
    s1.push(30);
    s1.show(); // 30 20 10
    s1.push(40); // 失败
    s1.show(); // 30 20 10
    s1.clean(); // 清空
    s1.show(); // 
    s1.deinit(); // 不用的时候释放空间即可

    // 声明完类之后 使用该类实例化的每个对象都是一个独立的栈
    My_Stack s2;
    s2.init(10); // 初始化

    return 0;
}